import string
import time
import threading
+import os
import xen.lowlevel.xc
from xen.util import asserts
m = self.image.getDomainMemory(self.info['memory'] * 1024)
balloon.free(m)
xc.domain_setmaxmem(self.domid, m)
- xc.domain_memory_increase_reservation(self.domid, self.info['memory'] * 1024, 0, 0)
+
+ init_reservation = self.info['memory'] * 1024
+ if os.uname()[4] == 'ia64':
+ # Workaround until ia64 properly supports ballooning.
+ init_reservation = m
+
+ xc.domain_memory_increase_reservation(self.domid, init_reservation,
+ 0, 0)
self.createChannels()
def getDomainMemory(self, mem_kb):
"""@return The memory required, in KiB, by the domain to store the
- given amount, also in KiB. This is normally just mem, but if HVM is
- supported, keep a little extra free."""
- if 'hvm' in xc.xeninfo()['xen_caps']:
- mem_kb += 4*1024;
+ given amount, also in KiB."""
+ if os.uname()[4] != 'ia64':
+ # A little extra because auto-ballooning is broken w.r.t. HVM
+ # guests. Also, slack is necessary for live migration since that
+ # uses shadow page tables.
+ if 'hvm' in xc.xeninfo()['xen_caps']:
+ mem_kb += 4*1024;
return mem_kb
def buildDomain(self):